#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int tot,l;
int num,sum;
struct Sti{
    int length;
    bool mark;
}sticks[105];
bool cmp(Sti a,Sti b){
    return a.length>b.length;
}
//s 已经拼成的大棒数量 len 已经组成的长度（还不到一个大棒） 
//pos 当前搜索的木棒位置
bool dfs(int s,int len,int pos){
    if(s==tot){
        return true;
    }
    for(int i=pos;i<num;i++){
        if(sticks[i].mark){
            continue;
        }
        if(len+sticks[i].length==l){
            sticks[i].mark=true;
            if(dfs(s+1,0,-1)){
                return true;
            }
            sticks[i].mark=false;
        }
        else if(len+sticks[i].length<l){
            sticks[i].mark=true;
            if(dfs(s,len+sticks[i].length,i+1)){
                return true;
            }
            sticks[i].mark=false;
            //神奇的剪枝
            if(len==0){
                return false;
            }
            while(sticks[i].length==sticks[i+1].length){
                i++;
            }
        }
    }
    return false;
}
int main(void){
    while(~scanf("%d",&num) && num){
        sum=0;
        for(int i=0;i<num;i++){
            scanf("%d",&sticks[i].length);
            sticks[i].mark=false;
            sum+=sticks[i].length;
        }
        sort(sticks,sticks+num,cmp);
        //枚举要拼成的大棒的长度
        for(l=sticks[0].length;l<=sum;l++){
            //剪枝
            if(sum%l!=0){
                continue;
            }
            tot=sum/l;
            //printf("%d\n",tot);
            if(dfs(0,0,0)){
                printf("%d\n",l);
                break;
            }
        }
    }
    return 0;
}